package cn.itcast.zt.example.singleton;

import java.io.*;

/**
 * 静态内部类：最安全
 * 加载一个类时，其内部类不会同时被加载。
 * 一个类被加载，当且仅当其某个静态成员（静态域、构造器、静态方法等）被调用时发生。。
 * 单例结构通过反射无法被破坏，但当单例实现Serializable接口时，可以通过序列化与反序列化破坏
 */
public class SingletonExample10Test {
    public static void main(String[] args) {
        try {
            // 创建第一个实例
            SingletonExample10 instance1 = SingletonExample10.getInstance() ;
            ObjectOutput out = null ;

            out = new ObjectOutputStream(new FileOutputStream("file.ser")) ;
            out.writeObject(instance1);
            out.close();

            // deserialize from file to object
            ObjectInput in = new ObjectInputStream(new FileInputStream("file.ser")) ;
            SingletonExample10 instance2 = (SingletonExample10) in.readObject() ;
            in.close() ;

            // 检查两个实例的hash值
            System.out.println("Instance 1 hash:" + instance1.hashCode());
            System.out.println("Instance 2 hash:" + instance2.hashCode());
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
